CDK Appをv1からv2に移行するモチベーションまとめ
昨年末 re:Invent期間中にCDK v2 がGAになりました。私もv1で書いていたアプリがあったので、そのうちv2に移行したいなぁと思っていたのですが、「結局v2にすると何が嬉しいんだっけ?」をよくわかっていなかったのでまとめてみました。
CDK v2への移行のモチベーション
すでにv1のアップデートは限られている
v1は6月1日よりメンテナンスモードに入りました。これにより、v1はv2に比べてアップデート内容が限られることになりました。
メンテナンスモードとは
メンテナンスモード期間中は
- L1 constructの新規リリースやアップデート
- 致命的なバグの修正
- セキュリティアップデート
は引き続き行われます。ですが以下は行われなくなります。
- 新機能リリース
- 軽微なバグの修正
- L2 constructの新規リリースやアップデート
特にL2 constructのアップデートが無くなるのが、CDKのメリットを大きく損なうので辛いですね。
さらに1年後には
メンテナンスモードも終了します。つまりL1 constructの新規リリースやアップデートも、バグ修正も、セキュリティアップデートも行われなくなってしまいます。(引き続きパッケージマネージャーからダウンロード可能で、コードはGitHubで確認することができます。)
パッケージインストールが基本一個だけで済む
v1はAWSサービスごとにパッケージが分割されています。それはつまりappで新しいサービスを利用したくなった場合、都度対応するパッケージを追加する必要があり手間です。
さらに、各パッケージのバージョンを正確にそろえておかないと、以下のようなデバッグしにくいエラーが起こることがあります。
v2ではすべてがaws-cdk-lib
という一つのパッケージに集約されます。ですのでv2では新しいサービスを利用する際にパッケージを追加する必要がありませんし、バージョンを揃える必要もありません。
マイナーバージョンアップデート時に破壊的変更が入らない
v1ではマイナーバージョンのアップデート時でも頻繁に破壊的変更がありました。ですのでアップデート時には入念な動作確認が必要でした。v2ではこれを改め、マイナーバージョンアップデートの際には破壊的変更が加わることはなくなりました。代わりに破壊的変更が入る実験的なライブラリは@aws-cdk-experiments/aws-xxx
といった別のパッケージに収録され、メインのaws-cdk-lib
とは切り離されます。そのライブラリが成熟し安定するとaws-cdk-lib
に取り込まれます。
各feature flagsがデフォルトオンになった
feature flagsというのは、各フラグをオン(true)にすることで新機能が利用できるようになるCDKの仕組みです。これがv2ではデフォルトでオンつまり新機能を利用できる状態になっています。ほとんどの機能はオフにすることができなくなっていますが、いくつかの機能のみフラグをオフにしてv1の状態に戻す事ができます。
新しいbootstrapがデフォルトで使われる
上記feature flagsのうちの一つなのですが、v2では cdk bootstrap
コマンドで使われるCFnテンプレートがmodern template と言われる新しいものに変わっています。(v1でもv1.25.0以降だとfeature flagをオンにして利用できます)
このmodern templateについて以前以下エントリにてまとめましたので、よろしければご覧ください。
クロスアカウント/マルチアカウントデプロイがやりやすくなる
上記 modern templateを利用したCDK Pipelinesのmodernバージョンを利用することで、CDパイプラインとデプロイ先を別々にしたクロスアカウントなデプロイパイプラインや、さらに発展して複数のアカウントに対してデプロイするパイプラインを簡単に作成できます。詳しくは以下のAWSブログをご覧ください。
DepricatedなAPIが削除された
v1がアップデートされていく過程で、多くのメソッドやクラスなどがDepricated(非推奨)となってきました。がDepricatedなだけで、依然使い続けることができました。
v2ではこれらDepricatedなものは廃止されました。ですので「どのメソッド(クラス)を使うのがベストなんだろう…」といった悩みが減るはずです。(一方で、v1でDepricatedなものを使われている場合、v2移行時にその部分のコードを書き換える必要があります。)
移行する!となった際に参考になる情報
上記リストを見て「移行したいなー」と思われたら、次は移行作業として実際どのようなことが発生するのか確認しましょう。以下ページ達が参考になります。
- Migrating to AWS CDK v2 - AWS Cloud Development Kit (CDK) v2
- AWS CDKv2にマイグレーションしてみた #reinvent | DevelopersIO
- AWS CDK v2 化マイグレーション目録 〜バージョンアップのウォッチから裏付け検証まで〜 | BLOG - DeNA Engineering
その他参考情報
- AWS CDK v1 will enter Maintenance Mode after June 1, 2022 · Issue #19836 · aws/aws-cdk
- Experimental construct librariesがAWS CDK v2で利用可能になりました | Amazon Web Services ブログ
- AWS CDKのv1はいつまでサポートされるのか調べてみた | DevelopersIO
- How customer feedback shaped the AWS Cloud Development Kit version 2 | AWS Developer Tools Blog